﻿namespace DimensionsHelper.Serialization.Enumerator;


[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public sealed class EnumStringConvertableAttribute : Attribute
{

    public EnumStringConvertableAttribute(Type type)
    {
        EnumeratorType = type;
        ConvertBack = true;
        ConditionType = null;
        ConditionConstructorArgIndex = -1;
        ConditionArgumentName = null;
    }


    /// <summary>
    /// 枚举类型
    /// </summary>
    public Type EnumeratorType { get; }


    /// <summary>
    /// 指定特性类型，默认是<see langword="null"/>。
    /// </summary>
    public Type? AttributeType { get; set; }


    /// <summary>
    /// 指定特性构造函数参数索引，默认是-1。
    /// </summary>
    public int AttributeConstructorArgIndex { get; set; } = -1;


    /// <summary>
    /// 指定特性的命名参数名称，默认是null。
    /// </summary>
    public string? AttributeArgumentName { get; set; }


    /// <summary>
    /// 是否查找特性类的派生类
    /// </summary>
    public bool AttributeDerivedType { get; set; }


    /// <summary>
    /// 是否忽略大小写
    /// </summary>
    public bool IgnoreCase { get; set; }


    /// <summary>
    /// 是否生成 字符串 -> 枚举类型的函数。
    /// </summary>
    /// <remarks>
    /// 设置此属性为<see langword="true"/>时，需要确保枚举元素对应的字符串不重复。
    /// </remarks>
    public bool ConvertBack { get; set; }


    /// <summary>
    /// 需要检查的条件值类型
    /// </summary>
    public Type? ConditionType { get; set; }


    /// <summary>
    /// 检查条件值的构造函数参数索引
    /// </summary>
    public int ConditionConstructorArgIndex { get; set; }


    /// <summary>
    /// 检查条件值的命名参数名称
    /// </summary>
    public string? ConditionArgumentName { get; set; }


    /// <summary>
    /// 生成的函数中 Convert{TargetName}ToString 中的 TargetName 字符串。
    /// </summary>
    public string? TargetName { get; set; }
}
